#include <iostream>
#include <string>
#include <pthread.h>
#include <cstdlib>
#include <unistd.h>
#include <thread>

using namespace std;


void threadrun()
{
    while(true)
    {
        cout << "I am a new thead for C++" << endl;
        sleep(1);
    }
}

int main()
{
    thread t1(threadrun);

    t1.join();

    return 0;
}

// class Request
// {
// public:
//     Request(int start,int end,string threadname)
//     :start_(start),end_(end),threadname_(threadname)
//     {}
// public:
//     int start_;
//     int end_;
//     string threadname_;
// };

// class Response
// {
// public:
//     Response(int result, int exitcode)
//     :result_(result),exitcode_(exitcode)
//     {}
// public:
//     int result_;   // 计算结果
//     int exitcode_; // 计算结果是否可靠
// };

// void *sumCount(void *args)
// {
//     Request *rq = static_cast<Request*>(args); 
//     Response *rsp = new Response(0,0);
//     for(int i = rq->start_; i <= rq->end_; i++)
//     {
//         cout << rq->threadname_ << " is runing, caling..., " << i << endl;
//         rsp->result_ += i;
//         usleep(100000);
//     }
    
//     delete rq;
//     return rsp;
// }
// int main()
// {
//     pthread_t tid;
//     Request *rq = new Request(1,100,"thread 1");
//     pthread_create(&tid, nullptr, sumCount, rq);

//     void *ret;
//     pthread_join(tid, &ret);
//     Response *rsp = static_cast<Response *>(ret);
//     cout << "rsp->result: " << rsp->result_ << ", exitcode: " << rsp->exitcode_ << endl;
//     delete rsp;
//     return 0;
    
// }

// //把线程 ID（pthread_t 类型）转换成 十六进制字符串，方便打印输出。
// string toHex(pthread_t tid)
// {
//     char hex[64];
//     snprintf(hex, sizeof(hex), "%p", tid);
//     return hex;
// }

// void * threadRoutine(void * args)
// {
//     int cnt =0;
//     while(cnt<3)
//     {
//         cout << "thread id: " << toHex(pthread_self()) << endl;
//         sleep(1);
//         cnt++;
//     }
//     return args;
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid,nullptr,threadRoutine,(void*)"thread 1");
//     cout << "主线程:新线程创建成功tid是: " << toHex(tid) << endl;
//     void* ret = nullptr;
//     pthread_join(tid,&ret);
//     cout<<"主线程拿到返回值："<<static_cast<const char*>(ret)<<endl;
//     return 0;
// }





// void *threadRun(void* args)
// {
//     while(1)
//     {
//         std::cout << "new thread: " << getpid() << std::endl;
//         sleep(1);
//     }
//     return nullptr;
// }
// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid,nullptr,threadRun,nullptr);
    
//     while(1)
//     {
//         std::cout << "main thread: " << getpid() << std::endl;
//         sleep(1);
//     }
//     return 0;
// }